package br.ucb.services;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;

import javax.management.ObjectName;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import br.ucb.dao.ConceitoDAO;
import br.ucb.dao.ConteudoDAO;
import br.ucb.dao.DisciplinaDAO;
import br.ucb.entity.Conceito;
import br.ucb.entity.Conteudo;
import br.ucb.entity.Disciplina;

import com.mxgraph.layout.hierarchical.mxHierarchicalLayout;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.view.mxGraph;


public class Acoes extends JFrame{
	protected static mxGraph graph = new mxGraph();
	protected static HashMap m = new HashMap();
	//private mxGraph graph;
	private mxGraphComponent graphComponent;
	private JTextField texto;
	private JButton botaoAdd;
	private JButton botaoDel;
	private JButton botaoLigar;
	private Object cell;
	
	public static HashMap getM(){
		return m;
	}
	public static mxGraph getGraph(){
		return graph;
	}
	public Acoes() throws SQLException, ClassNotFoundException{
		super("JGraph - Fluxograma");
		initGUI();
	}

	private void initGUI() throws SQLException, ClassNotFoundException {
	//	removeAll();
		setSize(800,600);
		setLocationRelativeTo(null);
		//graph = new mxGraph();
		
		graphComponent = new mxGraphComponent(graph);
		graphComponent.setPreferredSize(new Dimension(700,400));
		getContentPane().add(graphComponent);
		
	/*	texto = new JTextField();
		getContentPane().add(texto);
		texto.setPreferredSize(new Dimension(520,21));
		setLayout(new FlowLayout(FlowLayout.LEFT));
		
		botaoAdd = new JButton("Adicionar");
		getContentPane().add(botaoAdd);
		botaoAdd.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				AdicionarGrafo add = new AdicionarGrafo(texto.getText());
				
			}
		});*/
		/*botaoDel= new JButton("Deletar");
		getContentPane().add(botaoDel);
		botaoDel.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
							graph.getModel().remove(cell);
			}
		});
		
		botaoLigar= new JButton("Ligar");
		getContentPane().add(botaoLigar);
		botaoLigar.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
							AdicionarLinha linha = new AdicionarLinha();
			}
		});
		
		graphComponent.getGraphControl().addMouseListener(new MouseAdapter() {
			
			public void mouseReleased(MouseEvent e){
				cell = graphComponent.getCellAt(e.getX(), e.getY());
			}
		});*/
		
		
		graph.getModel().beginUpdate();
		Object parent = graph.getDefaultParent();
		Disciplina disciplina = DisciplinaDAO.getDisciplinaByLastId();
		Object v1 = graph.insertVertex(parent, null,disciplina.getNomeDisciplina(), 30, 80, 100, 50);
		List<Conceito> conceitos = ConceitoDAO.getConceitos();
		//for(Conceito conceito: conceitos){
		for(int cont=0; cont<conceitos.size(); cont++){
			if(conceitos.get(cont).getIdDisciplinaPai()==null){
				
				Object v2 = graph.insertVertex(parent, null, conceitos.get(cont).getNomeConceito(), 30, 80, 100, 50); ;
				getM().put(conceitos.get(cont).getNomeConceito(),v2);
				graph.insertEdge(parent, null, "", v1, v2);
			}
			for(int aux=0; aux<conceitos.size();aux++){
					System.out.println("ACOES Id conceito ="+conceitos.get(cont).getIdConceito() + "idConceitoPai:"+conceitos.get(aux).getIdConceitoPai());
					if(conceitos.get(aux).getIdConceitoPai() != null){
					//	System.out.println("AQUII");
						if(conceitos.get(cont).getIdConceito() == Integer.parseInt(conceitos.get(aux).getIdConceitoPai())){
							//System.out.println("AQUIIII");
							//Object v3 = graph.insertVertex(parent, null, conceitos.get(cont).getNomeConceito(), 30, 80, 100, 50);
							Object v5 = this.getM().get(conceitos.get(cont).getNomeConceito());
							Object v4 = graph.insertVertex(parent, null, conceitos.get(aux).getNomeConceito(), 30, 80, 100, 50); ;
							getM().put(conceitos.get(aux).getNomeConceito(),v4);
							
							graph.insertEdge(parent, null, "", v5, v4);
						}
					}
			}
			
		}
		List<Conteudo> conteudos = ConteudoDAO.getConteudos();
		for(int cont=0; cont<conteudos.size();cont++){
			System.out.println("FOR ID"+conteudos.get(cont).getIdConceito());
			System.out.println("FOR = "+ConceitoDAO.getNameByIdConceito(conteudos.get(cont).getIdConceito()));
			Object v6 = getM().get(ConceitoDAO.getNameByIdConceito(conteudos.get(cont).getIdConceito()));
			Object v7 = graph.insertVertex(parent, null, conteudos.get(cont).getDescricao(), 30, 80, 100, 50); ;
			getM().put(conteudos.get(cont).getDescricao(),v7);
			graph.insertEdge(parent, null, "", v6, v7);
		}
		//}
		
		graph.setCellsEditable(false);
		graph.setCellsMovable(false);
		
		mxHierarchicalLayout layout = new mxHierarchicalLayout(graph);
		layout.setDisableEdgeStyle(false);
		layout.execute(graph.getDefaultParent());
		graph.setAutoSizeCells(true);
       // graph.insertEdge(parent, null, "Edge", v2, v3);
		
		
		graph.getModel().endUpdate();
		
		
		//setLayout(new FlowLayout(FlowLayout.CENTER));
		
	}
}
